package com.maikec.utils.mybatis.provider;
/**
 * 邢帅教育
 * <p>
 * 本源代码由数据中心及其作者共同所有，未经版权持有者的事先书面授权，
 * 不得使用、复制、修改、合并、发布、分发和/或销售本源代码的副本。
 *
 * @copyright Copyright (c) 2018. [图片]xsteach.com all rights reserved.
 */

import org.apache.ibatis.jdbc.SQL;

import java.lang.reflect.Field;
import java.util.Map;

/**
 * select代理类
 * @author maikec
 * @date 2018/7/15
 */
public class SelectProvider<T> implements Provider{
    /**
     * 根据id查询
     * @param t pojo
     * @return sql
     */
    public String selectById(T t) throws Exception{
        if (null == t) {
            throw new NullPointerException(t.getClass().getName() + " is null");
        }
        return new SQL() {
            {
                SELECT(getColumns(t));
                FROM(getTableName(t));
                WHERE(getIdCondition(t));
            }
        }.toString();
    }

    /**
     * 根据条件查询列表
     * @param t pojo
     * @return sql
     */
    public String select(T t) throws Exception{
        if (null == t) {
            throw new NullPointerException(t.getClass().getName() + " is null");
        }
        return new SQL() {
            {
                SELECT(getColumns(t));
                FROM(getTableName(t));
                WHERE(getSql(t, false));
            }
        }.toString();
    }

    /**
     * 分页查询
     * @param para 分页参数
     * @return sql
     * @throws Exception exception
     */
    public String selectPage(Map<String, Object> para) throws Exception {
        T t = (T) para.get("t");
        return select(t);
    }
    private String getColumns(T t) {
        StringBuilder columns = new StringBuilder();
        for (Field field : t.getClass().getDeclaredFields()) {
            field.setAccessible(true);
            columns.append(field.getName());
            columns.append(",");
        }
        return columns.substring(0, columns.length()-1);
    }
}
